﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace Useful
{
    public partial class OptionalDateTimePickerTiny : UserControl
    {
        public event EventHandler ValueChanged;

        private bool presetVisibility = false;
        public bool PresetVisibility
        {
            get
            {
                return presetVisibility;
            }
            set
            {
                if (presetVisibility != value)
                {
                    presetVisibility = value;
                    SetPreset();
                }
            }
        }

        private void SetPreset()
        {
            bPreset.Visible = presetVisibility;
            lSpace.Visible = presetVisibility;
        }

        public ContextMenuStrip ContextMenuStripControl
        {
            get
            {
                return cmsPreset;
            }
        }

        public OptionalDateTimePickerTiny()
        {
            InitializeComponent();

            SetPreset();

            dtpValue.ShowCheckBox = true;
            dtpValue.ValueChanged += new EventHandler(dtpValue_ValueChanged);
        }

        private void dtpValue_ValueChanged(object sender, EventArgs e)
        {
            if (ValueChanged != null)
                ValueChanged(this, e);
        }

        public DateTime? Value
        {
            get
            {
                return dtpValue.Checked ? (DateTime?)dtpValue.Value : null;
            }
            set
            {
                if (value != null)
                {
                    dtpValue.Value = value.Value;
                    dtpValue.Checked = true;
                }
                else
                {
                    dtpValue.Checked = false;
                }
            }
        }

        public DateTime? Date
        {
            get
            {
                return dtpValue.Checked ? (DateTime?)dtpValue.Value.Date : null;
            }
        }

        public DateTimePicker DateTimePickerControl
        {
            get
            {
                return dtpValue;
            }
        }

        public bool ShowCheckBox
        {
            get
            {
                return dtpValue.ShowCheckBox;
            }
            set
            {
                dtpValue.ShowCheckBox = value;
            }
        }

        public DateTimePickerFormat Format
        {
            get
            {
                return dtpValue.Format;
            }
            set
            {
                dtpValue.Format = value;
            }
        }

        public string CustomFormat
        {
            get
            {
                return dtpValue.CustomFormat;
            }
            set
            {
                dtpValue.CustomFormat = value;
            }
        }

        private void bPreset_Click(object sender, EventArgs e)
        {
            cmsPreset.Show(bPreset, 0, bPreset.Height);
        }

        private void OptionalDateTimePicker_Load(object sender, EventArgs e)
        {
            /*cmsPreset.Items.Add("текущий").Click += new EventHandler(OptionalDateTimePicker_Click_текущий);
            cmsPreset.Items.Add("на утро текущего дня").Click += new EventHandler(OptionalDateTimePicker_Click_на_утро_текущего_дня);
            cmsPreset.Items.Add("на утро предыдущего дня").Click += new EventHandler(OptionalDateTimePicker_Click_на_утро_предыдущего_дня);
            cmsPreset.Items.Add("на начало текущего месяца").Click += new EventHandler(OptionalDateTimePicker_Click_на_начало_текущего_месяца);
            cmsPreset.Items.Add("на начало предыдущего месяца").Click += new EventHandler(OptionalDateTimePicker_Click_на_начало_предыдущего_месяца);*/

            cmsPreset.Items.Add("Текущее время").Click += new EventHandler(OptionalDateTimePicker_Click_текущий);
            cmsPreset.Items.Add("Начало текущего дня").Click += new EventHandler(OptionalDateTimePicker_Click_на_утро_текущего_дня);
            cmsPreset.Items.Add("Начало предыдущего дня").Click += new EventHandler(OptionalDateTimePicker_Click_на_утро_предыдущего_дня);
            cmsPreset.Items.Add("Начало текущего месяца").Click += new EventHandler(OptionalDateTimePicker_Click_на_начало_текущего_месяца);
            cmsPreset.Items.Add("Начало предыдущего месяца").Click += new EventHandler(OptionalDateTimePicker_Click_на_начало_предыдущего_месяца);
        }

        private void OptionalDateTimePicker_Click_текущий(object sender, EventArgs e)
        {
            Value = DateTime.Now;
        }

        private void OptionalDateTimePicker_Click_на_утро_текущего_дня(object sender, EventArgs e)
        {
            DateTime dt = DateTime.Now;

            Value = new DateTime(dt.Year, dt.Month, dt.Day);
        }

        private void OptionalDateTimePicker_Click_на_утро_предыдущего_дня(object sender, EventArgs e)
        {
            DateTime dt = DateTime.Now.AddDays(-1);

            Value = new DateTime(dt.Year, dt.Month, dt.Day);
        }

        private void OptionalDateTimePicker_Click_на_начало_текущего_месяца(object sender, EventArgs e)
        {
            DateTime dt = DateTime.Now;

            Value = new DateTime(dt.Year, dt.Month, 1);
        }

        private void OptionalDateTimePicker_Click_на_начало_предыдущего_месяца(object sender, EventArgs e)
        {
            DateTime dt = DateTime.Now.AddMonths(-1);

            Value = new DateTime(dt.Year, dt.Month, 1);
        }

        /*public override Size GetPreferredSize(Size proposedSize)
        {
            return new Size(dtpValue.Width + lSpace.Width + base.Width, bPreset.Height);
        }*/
    }
}
